package br.com.senac.pi5.servlet;

import br.com.senac.pi5.bean.DetalhesPassagem;
import br.com.senac.pi5.bean.Passageiro;
import br.com.senac.pi5.bean.Passagem;
import br.com.senac.pi5.bean.Voo;
import br.com.senac.pi5.dao.VooDao;
import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "ConfirmaCompraServlet", urlPatterns = {"/ConfirmaCompraServlet"})
public class ConfirmaCompraServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        String[] econSelected = request.getParameterValues("select_econ_ida");
        String[] execSelected = request.getParameterValues("select_exec_ida");
        DetalhesPassagem detalhes = (DetalhesPassagem) request.getSession(true).getAttribute("detalhesPassagem");

        VooDao vooDao = new VooDao();
        Voo vooIda = null;
        Voo vooVolta = null;

        //Calcular taxa de embarque
        Integer taxaEmbarque = detalhes.getPreco().getTaxaEmbarque();
        taxaEmbarque = 30;

        detalhes.setIsExecutiva(false);

        if (econSelected != null) {
            try {
                vooIda = vooDao.buscaVoo(econSelected[0].toString());
                request.getSession().setAttribute("vooIda", vooIda);

                if (detalhes.isIdaEvolta()) {
                    String[] econSelectedVolta = request.getParameterValues("select_econ_volta");
                    vooVolta = vooDao.buscaVoo(econSelectedVolta[0].toString());
                    request.getSession().setAttribute("vooVolta", vooVolta);
                    detalhes.getPreco().setTotal(detalhes.getPreco().getTotal() * 2);
                }
            } catch (SQLException | ParseException ex) {
                Logger.getLogger(ConfirmaCompraServlet.class.getName()).log(Level.SEVERE, null, ex);
            }

            //Calcular o total de Adultos existentes 
            detalhes.getPreco().setTotalAdulto(detalhes.getPreco().getPrecoEconomico() * detalhes.getNumeroAdultos());

            //Se o campo de criança foi preenchido
            if (detalhes.getNumeroCriancas() != null) {
                //Calcula o valor da passagem para a criança, que deveria ser 50%
                detalhes.getPreco().setTotalCrianca(detalhes.getPreco().getPrecoEconomico() * detalhes.getNumeroCriancas());
                detalhes.getPreco().setTotal(detalhes.getPreco().getTotalAdulto() + detalhes.getPreco().getTotalCrianca());
            } else {
                //Se não houver crianças , calcular somente dos adultos.
                detalhes.getPreco().setTotal(detalhes.getPreco().getTotalAdulto());
            }

        } else if (execSelected != null) {
            detalhes.setIsExecutiva(true);
            try {
                vooIda = vooDao.buscaVoo(execSelected[0].toString());
                request.getSession().setAttribute("vooIda", vooIda);

                if (detalhes.isIdaEvolta()) {
                    String[] execSelectedVolta = request.getParameterValues("select_exec_volta");
                    vooVolta = vooDao.buscaVoo(execSelectedVolta[0].toString());
                    request.getSession().setAttribute("vooVolta", vooVolta);
                    detalhes.getPreco().setTotal(detalhes.getPreco().getTotal() * 2);
                }
            } catch (SQLException | ParseException ex) {
                Logger.getLogger(ConfirmaCompraServlet.class.getName()).log(Level.SEVERE, null, ex);
            }

            //Calcular o total de Adultos existentes 
            detalhes.getPreco().setTotalAdulto(detalhes.getPreco().getPrecoExecutivo() * detalhes.getNumeroAdultos());

            //Se o campo de criança foi preenchido
            if (detalhes.getNumeroCriancas() != null) {
                //Calcula o valor da passagem para a criança, que deveria ser 50%
                detalhes.getPreco().setTotalCrianca(detalhes.getPreco().getPrecoExecutivo() * detalhes.getNumeroCriancas());
                detalhes.getPreco().setTotal(detalhes.getPreco().getTotalAdulto() + detalhes.getPreco().getTotalCrianca());
            } else {
                //Se não houver crianças , calcular somente dos adultos.
                detalhes.getPreco().setTotal(detalhes.getPreco().getTotalAdulto());
            }

        }

        //Calcular o total da taxa de embarque, que é  (R$30 * a quantidade de pessoas)
        detalhes.getPreco().setTotalTaxaEmbarque(taxaEmbarque * detalhes.getTotalPessoas());

        //Calcula o subtotal , que seria as passagens + taxa de embarque...
        detalhes.getPreco().setSubtotal(detalhes.getPreco().getTotal() + detalhes.getPreco().getTotalTaxaEmbarque());

        //seta os valores para o bean Passagem
        Passagem passagem = new Passagem();
        passagem.setVoo(vooIda);
        passagem.setPreco(detalhes.getPreco().getTotal());

        //Coloca dados da passagem na sessão
        request.getSession().setAttribute("Passagem", passagem);

        //Coloca dados do passageiro na sessão
        Passageiro passageiro = (Passageiro) request.getSession(true).getAttribute("Passageiro");

        //redirecionamento para as páginas de login ou de detalhamento da passagem.. Vai depender se o usuário está logado ou não.
        if (passageiro == null) {
            RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
            rd.forward(request, response);
        } else {
            RequestDispatcher rd = request.getRequestDispatcher("/detalhesPassagem.jsp");
            rd.forward(request, response);
        }
    }
}